﻿using System;
using System.Collections.Generic;
using System.Web.UI;
using System.Web.UI.DataVisualization.Charting;
using System.Web.UI.WebControls;
using vudu.Logica.Clases;

namespace vudu.PaginasWeb.G9Reporte
{
    public partial class ReporteAlumno : System.Web.UI.Page
    {
        public static string seccionSeleccionada;
        public static string opcion;
        Logica.Clases.Reporte reporte = new Logica.Clases.Reporte();

        /// <summary>
        /// se carga la pagina
        /// </summary>
        protected void Page_Load(object sender, EventArgs e)
        {
            //se valida que sea un profesor el que ingresa sino se devuelve al inicio
            string miRol = (string)Session["rol"];

            if (miRol != "Profesor")
                Response.Redirect("../G3AccesoSistema/InicioSistema.aspx");


            if (!Page.IsPostBack)
            {
                //se carga la informacion del profesor
                Profesor miProfe = (Profesor)Session["Usuario"];
                Label1.Text = "Profesor(a): " + miProfe.Nombre + " " + miProfe.Apellido;
                Label2.Text = ReporteSeleccion.nombreMateria;
                opcion = ReporteSeleccion.opcion;
                seccionSeleccionada = ReporteSeleccion.seccionSeleccionada;
                List<Estudiante> estudiantes = new List<Estudiante>();
                List<Evaluacion> evaluacionvalidar = reporte.ConsultarNotas(Convert.ToInt32(seccionSeleccionada));
                //se llama a consulta de estudiantes para la seccion seleccionada
                estudiantes = reporte.ConsultarEstudiantes(Convert.ToInt32(seccionSeleccionada));
                int i = 0;

                //se cargan los estudiantes en el dropbox
                while (i < estudiantes.Count)
                {
                    ListItem registroLista = new ListItem();
                    registroLista.Text = estudiantes[i].Nombre + " " + estudiantes[i].Apellido;
                    registroLista.Value = Convert.ToString(estudiantes[i].IdEst);
                    DropDownAlumno.Items.Add(registroLista);
                    i++;
                }

                if (estudiantes.Count.Equals(0))
                {
                    Label5.Text = "No hay alumnos inscritos";
                    Label5.ForeColor = System.Drawing.Color.Red;
                    DropDownAlumno.Visible = false;
                    Label6.Visible = false;
                    Chart1.Visible = false;
                    tabla.Visible = false;
                }
                if (evaluacionvalidar.Count.Equals(0))
                {
                    Label5.Text = "No hay evaluaciones asignadas";
                    Label5.ForeColor = System.Drawing.Color.Red;
                    DropDownAlumno.Visible = false;
                    Label6.Visible = false;
                    Chart1.Visible = false;
                    tabla.Visible = false;
                }
            }

        }

        /// <summary>
        /// Se cargan todas las notas de cada estudiante
        /// </summary>
        public void NotasAlumno()
        {
            String seleccion = DropDownAlumno.SelectedValue;
            List<Evaluacion> evaluaciones = reporte.ConsultarNotas(Convert.ToInt32(seccionSeleccionada));
            List<decimal> notas = new List<decimal>();
            notas = reporte.ConsultarNotasAlumno(Convert.ToInt32(seleccion),evaluaciones);
            List<int> listaNotas = new List<int>();
            List<String> nomEvaluaciones = new List<string>();
            int i = 0;


            //se llena una lista con el nombre de cada evaluacion
            while (i < evaluaciones.Count)
            {
                nomEvaluaciones.Add(evaluaciones[i].Nombre);
                i++;
            }
            i = 0;

            //se llena una lista con las notas del alumno
            while (i < notas.Count)
            {
                listaNotas.Add(Convert.ToInt32(notas[i]));
                i++;
            }

            Graficar(listaNotas,nomEvaluaciones);
            LlenarTabla(notas, nomEvaluaciones);
            
        }

        /// <summary>
        /// Se utiliza para dibujar el grafico con los datos recibidos
        /// </summary>
        public void Graficar(List<int> calculo,List<string> numeroEvaluaciones )
        {
            Title title = new Title("Nota Alumno");
            title.Font = new System.Drawing.Font("Arial", 20);
            Chart1.Titles.Add(title);
            Chart1.Series.Add(new Series());
            Chart1.Series[0].Points.DataBindXY(numeroEvaluaciones, calculo);
            Chart1.ImageType = System.Web.UI.DataVisualization.Charting.ChartImageType.Jpeg;
            Chart1.Legends.Add(new Legend());
            Chart1.Legends[0].Enabled = false;
            Chart1.ChartAreas[0].AxisX.MajorGrid.Enabled = false;
            Chart1.ChartAreas[0].AxisY.MajorGrid.Enabled = false;
        }

        /// <summary>
        /// Se llena la tabla con la informacion de las notas del alumno
        /// </summary>
        public void LlenarTabla(List<decimal> notas, List<String> nombreEvaluaciones)
        {
            //se crea un nuevo registro para la tabla
            TableRow registroTabla = new TableRow();
            Table1.Rows.Add(registroTabla);

            //se crea una celda para esta tabla.
            TableCell celdaTabla = new TableCell();
            celdaTabla.Width = 100;
            registroTabla.Cells.Add(celdaTabla);

            //se crean celdas y encabezados
            System.Web.UI.WebControls.Label labelCabecera = new Label();
            labelCabecera.Text = "Evaluación";
            celdaTabla.HorizontalAlign = HorizontalAlign.Center;
            celdaTabla.Font.Bold = true;
            celdaTabla.Controls.Add(labelCabecera);
           
            celdaTabla = new TableCell();
            celdaTabla.Width = 100;
            celdaTabla.Font.Bold = true;
            celdaTabla.HorizontalAlign = HorizontalAlign.Center;
            registroTabla.Cells.Add(celdaTabla);
            labelCabecera = new Label();
            labelCabecera.Text = "Nota";
            celdaTabla.Controls.Add(labelCabecera);

            int i = 0;

            //se crea una columna y un encabezado por cada evaluacion
            while (i < notas.Count)
            {
                TableRow registroTabla2 = new TableRow();
                Table1.Rows.Add(registroTabla2);

                TableCell celdaTabla2 = new TableCell();
                registroTabla2.Cells.Add(celdaTabla2);
                celdaTabla2.HorizontalAlign = HorizontalAlign.Center;
                System.Web.UI.WebControls.Label labelRegistro = new Label();
                labelRegistro.Text = nombreEvaluaciones[i];
                celdaTabla2.Controls.Add(labelRegistro);

                TableCell celdaTabla3 = new TableCell();
                registroTabla2.Cells.Add(celdaTabla3);
                celdaTabla3.HorizontalAlign = HorizontalAlign.Center;
                System.Web.UI.WebControls.Label labelRegistro3 = new Label();
                labelRegistro3.Text = Convert.ToString(notas[i]);
                celdaTabla3.Controls.Add(labelRegistro3);
                i++;
            }

        }

        /// <summary>
        /// Se imprime el contenido de la pagina y se recarga la pagina
        /// </summary>
        protected void Button1_Click(object sender, EventArgs e)
        {
            NotasAlumno();
            Session["ctrl"] = Panel1;
            Control ctrl = (Control)Session["ctrl"];      
            ClientScript.RegisterStartupScript(this.GetType(), "onclick", "<script language=javascript>window.open('ImprimirReporte.aspx','PrintMe','height=500px,width=500px,scrollbars=1');</script>");

        }

        /// <summary>
        /// Se devuelve a la pagina de seleccion de reportes
        /// </summary>
        protected void Button3_Click(object sender, EventArgs e)
        {
            Response.Redirect("ReporteSeleccion.aspx");

        }

        /// <summary>
        /// Cada vez que se selecciona un alumno cambia la informacion en la pagina
        /// </summary>
        protected void DropDownAlumno_SelectedIndexChanged(object sender, EventArgs e)
        {
            NotasAlumno();
        }

    }
}